﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SQLite;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace MwanaDOC
{
    public partial class cadDoc : UserControl
    {
        //instância inicial da classe Documento.
        //Para carregar os dados necessários ao form
        Documento docInit = new Documento();
        private Global.Modo _modo;
        //O objecto documento
        Documento doc = new Documento();
        Global gb = new Global();

        /// <summary>
        /// Construtor para Novo cadastro
        /// </summary>
        /// <param name="modo"></param>
        public cadDoc(Global.Modo modo)
        {
            InitializeComponent();
            _modo = modo;

            if (_modo == Global.Modo.Novo)
            {
                btnGuardar.Text = "Guardar";   //só pra certificar
            }
        }

        /// <summary>
        /// Somente quanto o modo= Atualizar
        /// </summary>
        /// <param name="modo"></param>
        /// <param name="doc"></param>
        public cadDoc(Global.Modo modo, Documento doc)
        {
            InitializeComponent();
            _modo = modo;
            this.doc = doc;

            if (_modo == Global.Modo.Atualizar)
            {
                //string sql = "select Nome From Materia Where idMateria=" + doc.Materia_idMateria + " ";
                btnGuardar.Text = "Atualizar";   //só pra certificar
                cabecalho.Values.Description = "Atualizar";
                txtCodDocumento.Text = doc.IdDocumento.ToString();
                txtTitulo.Text = doc.Titulo;
                txtDocumento.Text = doc.Doc_Path;
                txtPalavra.Text = doc.Palavra_Chave;
                rtbDescricao.Text = doc.Descricao;
                //cbxMateria.SelectedItem = gb.executaComResultado(sql).ToString();
                //MessageBox.Show(gb.executaComResultado(sql).ToString());


            }
        }

        private static cadDoc _frmChild;
        public static cadDoc getFrmFilho(Global.Modo modo)
        {
            //if (_frmChild == null)
            //{
            //    _frmChild = new cadDoc(modo);
            //}
            //else if ( _frmChild != null )
            //{
            //    if (_frmChild._modo == Global.Modo.Atualizar)
            //    {
            //        //neste caso é necessário criar nova instância do objeto
            //        _frmChild = new cadDoc(modo);
            //    }
            //}
            _frmChild = new cadDoc(modo);
            return _frmChild;
        }

        /// <summary>
        /// Somente para modo=Atualizar
        /// </summary>
        /// <param name="modo">Modo</param>
        /// <param name="doc">Documento</param>
        /// <returns></returns>
        public static cadDoc getFrmFilho(Global.Modo modo, Documento doc)
        {
            //if (_frmChild == null)
            //{
            //    _frmChild = new cadDoc(modo, doc);
            //}
            _frmChild = new cadDoc(modo, doc);
            return _frmChild;
        }

        public static void killFrmChild()
        {
            if (_frmChild != null)
                _frmChild = null;
        }


        /// <summary>
        /// Obtém a lista de matéria
        /// </summary>
        public void getMateria()
        {
            SQLiteDataReader leitor = null;

            leitor = docInit.getMateria();
            cbxMateria.Items.Add("<Escolher>");
            while (leitor.Read())
            {
                cbxMateria.Items.Add(leitor.GetString(1));
            }

            if (_modo == Global.Modo.Novo)
            {
                cbxMateria.SelectedItem = "<Escolher>";
            }
            else {
                string sql = "select Nome From Materia Where idMateria=" + doc.Materia_idMateria + " ";
                cbxMateria.SelectedItem = gb.executaComResultado(sql).ToString();
            }
            
        }

        //private void btnProcurar_Click(object sender, EventArgs e)
        //{
        //    DialogResult resultado;
        //    resultado = ofdAbrir.ShowDialog();

        //    if (resultado != DialogResult.Cancel)
        //    {
        //        txtDocumento.Text = ofdAbrir.FileName;
        //    }
        //}

        private void btnProcurar_Click_1(object sender, EventArgs e)
        {
            DialogResult resultado;
            lblResultado.Text = "";
            ofdAbrir.Filter = "Documento do Word|*.doc|Documento pdf|*.pdf|Arquivos de texto|*.txt|Documento do Word 2007|*.docx|Documento do OpenOffice-BrOffice|*.odt|Planilha de Excel|*.xls|Planilha do Excel 2007|*.xlsx";
            resultado = ofdAbrir.ShowDialog(this);

            if (resultado != DialogResult.Cancel)
            {
                txtDocumento.Text = ofdAbrir.FileName;
            }
        }

        private void cadDoc_Load(object sender, EventArgs e)
        {
            Global gb = new Global();

            this.getMateria();
            if (_modo == Global.Modo.Novo)
            {
                txtCodDocumento.Text = gb.getCodigo("select max(idDocumentos) From Documentos");
                lblObs.Text = "";
                
            }
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            doc.IdDocumento = int.Parse(txtCodDocumento.Text);
            doc.Titulo = txtTitulo.Text;
            doc.Descricao = rtbDescricao.Text;
            doc.Palavra_Chave = txtPalavra.Text;
            doc.Doc_Path = txtDocumento.Text;
            
            /*
             * A variávei doc.Materia_idMateria
             * é instanciadas na classe Materia dentro do método Save()
             */
            if (validar())
            {
                lblResultado.ForeColor = System.Drawing.Color.White;
                string nomeMateria = cbxMateria.SelectedItem.ToString();
           
                if (_modo == Global.Modo.Novo)
                {
                    if (doc.Save(nomeMateria))
                    {
                        lblResultado.ForeColor = System.Drawing.Color.White;
                        lblResultado.Text = "Operação concluida";
                    }
                    else
                    {
                        lblResultado.ForeColor = System.Drawing.Color.Red;
                        lblResultado.Text = "Operação não completada";
                    }
                }
                else if (_modo == Global.Modo.Atualizar)
                {
                    if (doc.Update(nomeMateria))
                    {
                        lblResultado.ForeColor = System.Drawing.Color.White;
                        lblResultado.Text = "Operação concluida";
                    }
                    else
                    {
                        lblResultado.ForeColor = System.Drawing.Color.Red;
                        lblResultado.Text = "Operação não completada";
                    }
                }
            }
            //else
            //{
            //    lblResultado.ForeColor = System.Drawing.Color.Red;
            //    lblResultado.Text = "Dados incompletos";
            //}
        }

        private bool validar()
        {
            lblResultado.ForeColor = System.Drawing.Color.Red;
            bool passed = false;

            if (txtCodDocumento.Text.Equals(""))
            {
                passed = false;
            }
            else
            {
                passed = true;
            }
            if (txtTitulo.Text.Equals(""))
            {
                passed = false;
                lblResultado.Text = "Informe um título para o documento";
                return passed;
            }
            else
            {
                passed = true;
                lblResultado.Text = "";
            }
            //if (txtPalavra.Text.Equals(""))
            //{
            //    passed = false;
            //    
            //}
            //else
            //{
            //    passed = true;
            //}
            if ((cbxMateria.SelectedIndex == 0) || ( cbxMateria.SelectedItem == null))
            {
                passed = false; lblResultado.Text = "Escolhe a matéria para o documento";
                return passed;
            }
            else { passed = true; lblResultado.Text = ""; }

            if (txtDocumento.Text.Equals(""))
            {
                passed = false;
                lblResultado.Text = "Selecione um documento";
                return passed;
            }
            else
            {
                passed = true;
                lblResultado.Text = "";
            }
            //if (rtbDescricao.Text.Equals(""))
            //{
            //    passed = false;
            //}
            //else
            //{
            //    passed = true;
            //}
            
            return passed;

        }

        private void painel_DragDrop(object sender, DragEventArgs e)
        {
            //MessageBox.Show(e.Data.GetData(DataFormats.FileDrop).ToString());
        }

        private void txtTitulo_KeyPress(object sender, KeyPressEventArgs e)
        {
            lblResultado.Text = "";
            if ((!Char.IsLetter(e.KeyChar)) && (e.KeyChar != Convert.ToChar(Keys.Back)))                
            {
                if (!validFileName(e.KeyChar))
                {
                    e.Handled = true;
                    erro.SetError(txtTitulo, "A sigla não pode conter os caracteres \\ / : * ? \" < > e |");
                }
                else
                {
                    erro.Clear();
                    
                }
            }
        }
      
        /// <summary>
        /// Nome de arquivo válido
        /// <seealso cref="validFolderName"/>
        /// </summary>
        /// <param name="p"></param>
        /// <returns></returns>
        private bool validFileName(char p)
        {
            bool valido = true;

            char[] c = { '\\', '/', ':', '*', '?', '\"', '<', '>', '|' };

            foreach (char ch in c)
            {
                if (ch.Equals(p))
                {
                    valido = false;
                    break;

                }
                
            }
            return valido;
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            limpaCampos();
        }

        private void limpaCampos()
        {
            foreach (Control c in painel.Controls)
            {
                if ((c is TextBox) && (c.Name != txtCodDocumento.Name))
                {
                    c.Text = "";
                }
            }
        }

        private void cbxMateria_SelectedValueChanged(object sender, EventArgs e)
        {
            lblResultado.Text = "";
        }

        private void rtbDescricao_KeyPress(object sender, KeyPressEventArgs e)
        {
            lblResultado.Text = "";
        }

        private void txtPalavra_KeyPress(object sender, KeyPressEventArgs e)
        {
            lblResultado.Text = "";
        }

       
    }
}
    